package com.demo.java.OD451_500.OD493;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【字符统计及重排(B卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146430097
 */
public class OdMain {
    public static void main(String[] args) {
        // 处理输入
        Scanner scanner = new Scanner(System.in);
        String inputStr = scanner.nextLine();

        // 统计每个字符出现的次数
        Map<Character, Integer> charCount = new HashMap<>();
        for (char c : inputStr.toCharArray()) {
            charCount.put(c, charCount.getOrDefault(c, 0) + 1);
        }

        // 自定义排序规则
        List<Map.Entry<Character, Integer>> entryList = new ArrayList<>(charCount.entrySet());
        entryList.sort((a, b) -> {
            // 比较次数
            if (a.getValue() > b.getValue()) {
                return -1;
            } else if (a.getValue().equals(b.getValue())) {
                // 比较字典顺序
                return a.getKey().compareTo(b.getKey());
            } else {
                return 1;
            }
        });

        // 输出结果
        StringBuilder resStr = new StringBuilder();
        for (Map.Entry<Character, Integer> entry : entryList) {
            resStr.append(entry.getKey()).append(":").append(entry.getValue()).append(";");
        }

        // 删除末尾多余的分号
        System.out.println(resStr.toString().substring(0, resStr.length() - 1));
    }
}
